package com.nio.c3_Channel;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

/**
 * @version No one is coming, unless you change yourself!!!
 * @author： pang-yun
 * @date： 2021-05-31 14:17
 */


//transferTo 大小有限制 2g  那么大文件可能需要多次传输
/*思路  ： size可以看到文件大小，我们可以使用总体的大小- 现在剩余文件大小  从而找到下一次传输文件的起点
 *
 * */
public class ChannelTransferToBig {
    public static void main(String[] args) {
        try (FileChannel from = new FileInputStream("data.txt").getChannel();
             FileChannel to = new FileOutputStream("to.txt").getChannel();
        ) {
            //传输文件的大小
            long size = from.size();

            //left 代表还剩余多少字节
            for (long left = size; left > 0; ) {
                System.out.println("position:"+(size-left)+" left:"+left);

                //transferTo 会返回的是  ：  实际传输的字节数
                left -= from.transferTo((size - left), left, to);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
